//
// Created by ASUS on 24-4-14.
//

#ifndef LINKLIST_H
#define LINKLIST_H

#define ElemType int

typedef struct LNode {
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

//初始如果链表为空，则返回空链表，否则返回原链表
LinkList LiList_Init(LinkList l);

//链表长度
int LiList_Length(LinkList l);

//元素e是否在链表l中，在返回位置，不在返回NULL
LNode* LiList_LocateElem(LinkList l, ElemType e);

//头插法，将元素e插入到链表头部
LinkList LiList_HeadInsert(LinkList l);

//尾插法，将元素e插入到链表尾部
LNode* LiList_GetElem(LinkList l, int i);

//在位置j处插入元素e
int LiList_Insert(LinkList l, int i, ElemType e);

//删除位置i处的元素，并返回其值
ElemType LiList_Delete(LinkList l, int i, ElemType *e);

//打印链表
void LiList_Print(LinkList L);

//判断链表是否为空
int LiList_Empty(LinkList l);

#endif //LINKLIST_H
